package lvm.fonctions.prim.fsubr;

import lvm.Contexte;
import lvm.LvmException;
import lvm.fonctions.eval.Expr;
import lvm.fonctions.prim.subr.Cons;
import lvm.struct.Scons;
import lvm.struct.Sexpr;
import lvm.struct.Symbole;

/**
 * Class en cour d'implémentation
 * @author vsplit
 *
 */
public class De extends Fsubr {
	public static final De DE = new De();
	
	public De() {
		super("de");
	}

	@Override
	public Sexpr exec(Sexpr arg) throws LvmException {
		String fonctionName;
		Sexpr args,fonction;
		if(arg.getCar() instanceof Symbole){
			Sexpr cdr = arg.getCdr();
			fonctionName = arg.getCar().toString();
			args = arg.getCdr().getCar();
			fonction = arg.getCdr().getCdr().getCar();
			Contexte.getContexteCourant().putVariable(arg.getCar().toString(),new Expr(fonctionName,args,fonction));
			return new Symbole("de "+arg.getCar().toString()+" : true");
		}
		return new Symbole("Le premier argument dois être un symbole");
	}

}
